package admin

import (
	"bytes"
	"errors"
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"github.com/gin-gonic/gin"
	"mojieshi/define"
	"mojieshi/service"
	"net/http"
	"os"
	"time"
)

// 阿里云oss上传
func AliyunUpload(c *gin.Context) {
	//接收上传的文件
	file, err := c.FormFile("file")
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 10000,
			"msg":  err,
		})
		return
	}
	// 创建OSSClient实例。
	// yourEndpoint填写Bucket对应的Endpoint，以华东1（杭州）为例，填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	// 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
	client, err := oss.New("oss-cn-hangzhou.aliyuncs.com", "LTAI5tFs4DhW79QzhGn27w2U", "n3QKYVbUIkPkuxNEzp7AN7dqiNXp6X")
	if err != nil {
		define.Response.ResultFail(c, 10001, err.Error(), "")
		os.Exit(-1)
		return
	}
	//保存的文件夹
	now := time.Now().Format("20060102")
	// 判断存储空间是否存在。
	// yourBucketName填写存储空间名称。
	isExist, err := client.IsBucketExist("xinyijiazhen")
	if err != nil {
		define.Response.ResultFail(c, 10002, err.Error(), "")
		os.Exit(-1)
		return
	}
	fmt.Println("IsBucketExist result : ", isExist)
	// 填写存储空间名称，例如examplebucket。
	bucket, err := client.Bucket("xinyijiazhen")
	if err != nil {
		define.Response.ResultFail(c, 10003, err.Error(), "")
		os.Exit(-1)
		return
	}
	// 填写目录名称，目录需以正斜线结尾。
	filepath := "upload/video/" + now + "/"
	err = bucket.PutObject(filepath, bytes.NewReader([]byte("")))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	//获取文件后缀
	extstring := service.Ext(file.Filename)
	fmt.Println(extstring)
	extStrSlice := []string{".xlsx", ".jpg", ".png", ".gif", ".jpeg", ".xls", ".mp4", ".mp3", ".JPG", ".PNG"}
	if !service.ContainArray(extstring, extStrSlice) {
		//fmt.Println("上传失败，文件类型不支持，只能上传 xlsx 格式的。")
		err = errors.New("上传失败，文件类型不支持，只能上传 xlsx,jpg,png,gif 格式的。")
		c.JSON(http.StatusOK, gin.H{
			"code": 10004,
			"msg":  err,
		})
		return
	}
	suiji := define.RandomNum(4) + extstring
	// 文件名格式 自己可以改 建议保证唯一性
	fileName := fmt.Sprintf("%s%s", time.Now().Format("20060102150405"), suiji)
	fileContent, _ := file.Open()
	// 依次填写Object的完整路径（例如exampledir/exampleobject.txt）和本地文件的完整路径（例如D:\\localpath\\examplefile.txt）。
	err = bucket.PutObject(filepath+fileName, fileContent)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	pathRoot := "https://xinyijiazhen.oss-cn-hangzhou.aliyuncs.com/" + filepath + fileName //保存的路径
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"code":    0,
		"msg":     "上传成功",
		"data": map[string]interface{}{
			"file": pathRoot,
		},
	})
}
